//package com.itcast.cheetah.rabbitmq.config;
//
//import org.springframework.amqp.core.*;
//import org.springframework.amqp.rabbit.connection.ConnectionFactory;
//import org.springframework.amqp.rabbit.connection.CorrelationData;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
///**
// * @className: DirectRabbitConfig
// * @description: 直连交换机的配置
// * @author: cheetah
// * @date: 2022/2/8 10:39
// * @Version: 1.0
// */
//@Configuration
//public class DirectRabbitConfig {
//
//    @Bean
//    public RabbitTemplate createRabbitTemplate(ConnectionFactory connectionFactory){
//        RabbitTemplate rabbitTemplate = new RabbitTemplate();
//        rabbitTemplate.setConnectionFactory(connectionFactory);
//        //设置开启 Mandatory,才能触发回调函数,无论消息推送结果怎么样都强制调用回调函数
//        rabbitTemplate.setMandatory(true);
//
//        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
//            @Override
//            public void confirm(CorrelationData correlationData, boolean ack, String cause) {
//                System.out.println("ConfirmCallback:     "+"相关数据："+correlationData);
//                System.out.println("ConfirmCallback:     "+"确认情况："+ack);
//                System.out.println("ConfirmCallback:     "+"原因："+cause);
//            }
//        });
//
//        rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback(){
//            @Override
//            public void returnedMessage(ReturnedMessage returned) {
//                System.out.println("ReturnCallback:     "+"消息："+returned.getMessage());
//                System.out.println("ReturnCallback:     "+"回应码："+returned.getReplyCode());
//                System.out.println("ReturnCallback:     "+"回应信息："+returned.getReplyText());
//                System.out.println("ReturnCallback:     "+"交换机："+returned.getExchange());
//                System.out.println("ReturnCallback:     "+"路由键："+returned.getRoutingKey());
//            }
//        });
//        return rabbitTemplate;
//    }
//
//
//    /**
//     * 定义交换机
//     **/
//    @Bean
//    public DirectExchange directExchange(){
//        /**
//         * 交换机名称
//         * 持久性标志：是否持久化,默认是 true 即声明一个持久的 exchange,该exchange将在服务器重启后继续运行
//         * 自动删除标志：是否自动删除，默认为 false, 如果服务器想在 exchange不再使用时删除它，则设置为 true
//         **/
//        return new DirectExchange("directExchange", true, false);
//    }
//
//    /**
//     * 定义队列
//     **/
//    @Bean
//    public Queue directQueue(){
//        /**
//         * name：队列名称
//         * durable：是否持久化,默认是 true,持久化队列，会被存储在磁盘上，当消息代理重启时仍然存在
//         * exclusive：是否排他，默认为 false，true则表示声明了一个排他队列（该队列将仅由声明者连接使用），如果连接关闭，则队列被删除。此参考优先级高于durable
//         * autoDelete：是否自动删除， 默认是 false，true则表示当队列不再使用时，服务器删除该队列
//         **/
//        return new Queue("directQueue",true);
//    }
//
//    /**
//     * 队列和交换机绑定
//     * 设置路由键：directRouting
//     **/
//    @Bean
//    Binding bindingDirect(){
//        return BindingBuilder.bind(directQueue()).to(directExchange()).with("directRouting");
//    }
//
//}
